home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / cprog.EXE / DOSEX.C < prev    next >
Text File  |  1996-07-05  |  9KB  |  257 lines

  1. /******************************************************************/
  2. /* Bu ornek program, sunlarin nasil yapildigini gosterir:         */
  3. /*  1. DOS dan saat ve tarihin okunmasi                           */
  4. /*  2. Cursor'un ekranda herhangi bir yere konmasi                */
  5. /*  3. Klavyeden karakterler okunmasi, ve kodlarinin gosterilmesi */
  6. /*  4. Ekrandaki bir pencerenin scroll edilmesi                   */
  7. /*  5. Okunmasini kolaylastirmak icin programi iyi duzenlemek     */
  8. /******************************************************************/
  9.  
  10. #include "stdio.h"
  11. #include "dos.h"
  12.  
  13. main()
  14. {
  15. int saat, dakika, saniye, eski_san;
  16. int karakter;
  17.  
  18.    kutu_ciz();              /* Window'un cevresine kutu cizer   */
  19.    eski_san = 0;             /* Bu degisken eski zamani saklar   
  20.                                - ki degisti mi diye bakabilelim */
  21.  
  22.    do {
  23.       if (kbhit()) {                     /* Bir tusa mi basildi?*/
  24.          karakter = getch();             /* karakteri oku       */
  25.          goster_kar(karakter);           /* goster              */
  26.       }
  27.  
  28.       zamani_al(&saat,&dakika,&saniye);      /* zamani ogrenelim    */ 
  29.       if (saniye != eski_san) {              /* degistiyse,         */
  30.          goster_zaman_tarih();               /* ekrani goster       */
  31.          eski_san = saniye;                  /* yeni zamani sakla   */
  32.       }
  33.  
  34.    } while (karakter != 'Q');        /* Q ya basilinca dur.    */
  35.  
  36.    cursoru_koy(0,0);              /* Ekrana cursor u koy         */
  37. }
  38.  
  39.  
  40. /* **************************************************** kutu_ciz*/
  41. /* Bu rutin, ekrana bir kutu cizer. Basilan tuslar, saat ve     */
  42. /* tarih bu kutularda gorunur. Ozel bir numara yok burada,      */
  43. /* sadece standart printf ile cizilen kutular..                 */
  44. /* ************************************************************ */
  45. kutu_ciz()
  46. {
  47. int index;
  48. char satir[81];
  49.  
  50.    for (index = 0;index < 80;index++)       /* 3 bos satir      */
  51.       satir[index] = ' ';
  52.    satir[80] = NULL;                            /* katarin sonu  */
  53.    for (index = 0;index < 3;index++)
  54.       printf("%s",satir);
  55.  
  56.    satir[8] = 201;                       /* kutunun ust satiri    */
  57.    for (index = 9;index < 70;index++)
  58.       satir[index] = 205;
  59.    satir[70] = 187;
  60.    printf("%s",satir);
  61.  
  62.    satir[8] = 186;                    /* buyuk pencerenin ustu   */
  63.    for (index = 9;index < 70;index++)
  64.       satir[index] = ' ';
  65.    satir[70] = 186;
  66.    for (index = 0;index < 15;index++)
  67.       printf("%s",satir);
  68.  
  69.    satir[8] = 204;                    /* pencereler arasindaki cizgi */
  70.    for (index = 9;index < 70;index++)
  71.       satir[index] = 205;
  72.    satir[70] = 185;
  73.    printf("%s",satir);
  74.  
  75.    satir[8] = 186;                    /* tarih/saat'in kenari    */
  76.    for (index = 9;index < 70;index++)
  77.       satir[index] = ' ';
  78.    satir[70] = 186;
  79.    printf("%s",satir);
  80.  
  81.    satir[8] = 200;                     /* kutunun alti            */
  82.    for (index = 9;index < 70;index++)
  83.       satir[index] = 205;
  84.    satir[70] = 188;
  85.    printf("%s",satir);
  86.  
  87.    for (index = 0;index < 80;index++)       /* 3 bos satir      */
  88.       satir[index] = ' ';
  89.    for (index = 0;index < 3;index++)
  90.       printf("%s",satir);
  91.  
  92. }
  93.  
  94.  
  95. /* ************************************************** goster_kar*/
  96. /* Bu rutin, basilan tusu ekranda gosterir. Sayet ilk karakter  */
  97. /* sifir ise, ozel bir tusa basilmis demektir. O zaman, bundan  */
  98. /* sonraki tus okunur, ve sonuc ekrana yazilir.                 */
  99. /* ************************************************************ */
  100. goster_kar(tus)
  101. int tus;
  102. {
  103.    pencere_scroll();
  104.    cursoru_koy(17,15);          /* mesajin yerini ayarlayalim    */
  105.  
  106.    if(tus == 0) {
  107.       printf(" 00 ");            /* ozel bir tusa basilmis!     */
  108.       tus = getch();          /* bundan sonraki tusu oku     */
  109.       switch (tus) {
  110.          case 59  :
  111.          case 60  :
  112.          case 61  :
  113.          case 62  :
  114.          case 63  :              /* bunlar fonksiyon tuslari    */
  115.          case 64  :
  116.          case 65  :
  117.          case 66  :
  118.          case 67  :
  119.          case 68  : printf("%4d Fonksiyon tusu F%d\n",tus,tus-58);
  120.                     break;
  121.  
  122.          case 94  :
  123.          case 95  :
  124.          case 96  :
  125.          case 97  :
  126.          case 98  :         /* bunlar ctrl-fonksiyon tuslari    */
  127.          case 99  :
  128.          case 100 :
  129.          case 101 :
  130.          case 102 :
  131.          case 103 : printf("%4d Fonksiyon tusu Ctrl-F%d\n",tus,
  132.                        tus-93);
  133.                     break;
  134.  
  135.          case 84  :
  136.          case 85  :
  137.          case 86  :
  138.          case 87  :        /* bunlar SHIFT-fonksiyon tuslari    */
  139.          case 88  :
  140.          case 89  :
  141.          case 90  :
  142.          case 91  :
  143.          case 92  :
  144.          case 93  : printf("%4d Fonksiyon tusu SHIFT-F%d\n",tus,
  145.                        tus-83);
  146.                     break;
  147.  
  148.          case 104 :
  149.          case 105 :
  150.          case 106 :
  151.          case 107 :
  152.          case 108 :          /* bunlar da alt-fonksiyon tuslari */
  153.          case 109 :
  154.          case 110 :
  155.          case 111 :
  156.          case 112 :
  157.          case 113 : printf("%4d Fonksiyon tusu Alt-F%d\n",tus,
  158.                        tus-103);
  159.                     break;
  160.  
  161.          default  : printf("%4d Ozel tusa basildi\n",tus);
  162.       }
  163.  
  164.    } else                        /* normal bir tusa basilmis    */ 
  165.       printf("    %4d (%c) Tusuna basildi\n",tus,tus);
  166.  
  167.    cursoru_koy(25,1);        /* cursor'u 26. satira saklayalim    */
  168. }
  169.  
  170.  
  171. /* *************************************************** zamani_al*/
  172. /* Bu rutin, DOS u cagirarak, gunun zamanini ogrenir. Cagiran   */
  173. /* programa kendisine gecirilmis olan 3 pointer'da bu bilgiyi   */
  174. /* dondurur..                                                   */
  175. /* ************************************************************ */
  176. zamani_al(saat,dakika,saniye)
  177. int *saat, *dakika, *saniye;
  178. {
  179. union REGS gir_reg;
  180. union REGS cik_reg;
  181.  
  182.    gir_reg.h.ah = 44;               /* Hex 2C - Simdiki zamani al */
  183.    int86(0x21,&gir_reg,&cik_reg);
  184.    *saat = cik_reg.h.ch;
  185.    *dakika = cik_reg.h.cl;
  186.    *saniye = cik_reg.h.dh;
  187. }
  188.  
  189.  
  190. /* *******************************************goster_zaman_tarih*/
  191. /* Bu rutin, zamani ve tarihi ekranda sabit bir noktada         */
  192. /* gosterir. Zamani zamani_al fonksiyonundan ogrenir, ve tarihi,*/
  193. /* kendi icindeki bir DOS cagirimindan alir. Iyi programlama    */
  194. /* teknigi, tarihin de ayri bir rutine konmasini soyler, ama biz*/
  195. /* sadece islerin nasil yapildigini degisik yollardan gostermek */
  196. /* amaci ile yapiyoruz. Bu rutin ayni zamanda cursor_koy ile    */
  197. /* saat ve tarihi sabit bir yere koyar.                         */
  198. /* ************************************************************ */
  199. goster_zaman_tarih()
  200. {
  201. int saat, dakika, saniye;
  202. union REGS gir_reg;
  203. union REGS cik_reg;
  204.  
  205.    cursoru_koy(19,19);  /* Saat ve takvim icin yer               */
  206.  
  207.    gir_reg.h.ah = 42;              /* hex 2A - tarih nedir?      */
  208.    int86(0x21,&gir_reg,&cik_reg);  /* interrupt 21               */      
  209.    printf("Tarih= %2d/%2d/%2d    ",
  210.       cik_reg.h.dh,                 /* ay  - 1 den 12           */
  211.       cik_reg.h.dl,                 /* gun - 1 den 31           */
  212.       cik_reg.x.cx);                /* yil - 1980 den 2099      */
  213.  
  214.    zamani_al(&saat, &dakika, &saniye);
  215.    printf("Saat = %2d:%2d:%2d\n",saat, dakika, saniye);
  216.  
  217.    cursoru_koy(25,1);        /* cursoru 26. satira saklayalim    */
  218. }
  219.  
  220. /* *************************************************cursoru_koy */
  221. /* Bu rutin, cursoru istenilen yere koyar. Sol ust kose, satir 0*/
  222. /* ve kolon 0 dir.                                              */
  223. /* ************************************************************ */
  224. cursoru_koy(satir,kolon)
  225. char satir, kolon;
  226. {
  227. union REGS gir_reg;
  228. union REGS cik_reg;
  229.  
  230.    gir_reg.h.ah = 2;        /* servis 2 - cursoru yerlestir      */
  231.    gir_reg.h.dh = satir;
  232.    gir_reg.h.dl = kolon;
  233.    gir_reg.h.bh = 0;
  234.    int86(0x10,&gir_reg,&cik_reg);                /* interrupt 10 */
  235. }
  236.  
  237.  
  238. /* ********************************************** pencere_scroll*/
  239. /* Basilan tus penceresindeki herseyi bir satir yukari kaydirir,*/
  240. /* yeni yazilacak seylere yer acar.                             */
  241. /* ************************************************************ */
  242. pencere_scroll()
  243. {
  244. union REGS gir_reg;
  245. union REGS cik_reg;
  246.  
  247.    gir_reg.h.ah = 6;      /* servis  6 - pencereyi scroll        */
  248.    gir_reg.h.al = 1;      /* kac satir kayacagi                  */
  249.    gir_reg.h.ch = 3;      /* pencerenin ust satiri               */
  250.    gir_reg.h.cl = 9;      /* pencerenin sol kolonu               */
  251.    gir_reg.h.dh = 17;     /* pencerenin alt satiri               */
  252.    gir_reg.h.dl = 69;     /* pencerenin sag kolonu               */
  253.    gir_reg.h.bh = 7;      /* acilan bos satir(larin) 'rengi'     */
  254.    int86(0x10,&gir_reg,&cik_reg);                /* interrupt 10 */
  255.  
  256. }
  257.